#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//int main()
//{
//	//二维数组，数组名代表第一行的地址，数组名+1代表第二行的地址
//	int aa[2][5] = { 10,9,8,7,6,5,4,3,2,1 };
//	//&数组名取到的是整个数组，&数组名+1，代表跳过整个数组
//	//跳过整个数组后，指向数组后的第一个地址，强制转化为整型指针，赋给ptr1
//	int* ptr1 = (int*)(&aa + 1);
//	//二维数组，数组名代表第一行的地址，数组名+1代表第二行的地址
//	//*(aa + 1)=aa[1] ,aa[1]是第二行的数组名，代表首地址
//	int* ptr2 = (int*)(*(aa + 1));
//	printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
//	return 0;
//}
//
//
//1, 2, 3, 4, 5,
//6, 7, 8, 9, 10
//0, 0, 0, 0, 0
////数组名表示首元素的地址，二维数组来说，表示第一行的地址，是一个一维数组的地址
////指向一个一维数组


//int main()
//{
//	//  4 1
//	int a[5] = { 5, 4, 3, 2, 1 };
//	int* ptr = (int*)(&a + 1);
//	printf("%d,%d", *(a + 1), *(ptr - 1));
//	return 0;
//}

//1.sizeof（数组名），数组名表示整个数组，计算的是整个数组的大小
//2.&数组名，数组名表示整个数组，取出的是整个数组的地址
//除此之外，所有的数组名都是数组首元素的地址
int main()
{
	//int a[] = { 1,2,3,4 };
	//printf("%d\n", sizeof(a));//4*4=16
	//printf("%d\n", sizeof(a + 0));//4
	//printf("%d\n", sizeof(*a));//4
	//printf("%d\n", sizeof(a + 1));//4
	//printf("%d\n", sizeof(a[1]));//4
	//printf("%d\n", sizeof(&a));//4*4=16 
	//printf("%d\n", sizeof(*&a));//16
	//printf("%d\n", sizeof(&a + 1));//4
	//printf("%d\n", sizeof(&a[0]));//4
	//printf("%d\n", sizeof(&a[0] + 1));//4
	char arr[] = { 'a','b','c','d','e','f'};
	printf("%d\n", sizeof(arr));//1*6=6
	printf("%d\n", sizeof(arr + 0));//4
	printf("%d\n", sizeof(*arr));//1
	printf("%d\n", sizeof(arr[1]));//1
	printf("%d\n", sizeof(&arr));//4
	printf("%d\n", sizeof(&arr + 1));//4;
	printf("%d\n", sizeof(&arr[0] + 1));//4;
	return 0;
}